<?php 
	
class db
{
	var $link;
	var $dbhost;
	var $dbuser;
	var $dbpassword;
	var $dbname;
	var $dbconnect;
	var $tablepre;
	var $time;
        var $dbcharset;
	
	
//	$dbhost = 'localdbhost';			// 数据库服务器
//	$dbuser = 'root';			// 数据库用户名
//	$dbpassword = 'xx';				// 数据库密码
//	$dbname = 'sail';			// 数据库名
//	$dbconnect = 0;				// 数据库持久连接 0=关闭, 1=打开
//	$tablepre                               //表前缀
//	连接示例
//	$db = new db($dbhost, $dbuser, $dbpassword, $dbname, $dbconnect);
//	销毁变量
//	unset($dbhost, $dbuser, $dbpassword, $dbname, $dbconnect);
//	$db->query("set names 'GBK'");


	//创建构造函数，连接数据库及数据表
        //数据库配置以一维数据的形式加载，数组中必须有：host,user,password,name 这4个键,connect,tablepre,charset,time 可以不写
	public function __construct()
	{
            $config_array = include ROOT.'config'.DIRECTORY_SEPARATOR.'db.inc.php';
            if(!is_array($config_array))
                //die('Could not connect: ' . mysql_error());
                exit ("Database connect failed.." . mysql_error());
            //将数据打散为变量
            extract($config_array);
            //数组中如果哪个键没有则自动补上，值为空
            foreach ($config_array as $key => $value) {
                if(!isset ($$key))
                    $config_array[$key] = '';
            }
            
            $this->dbinit($host, $user, $password, $name,$connect, $tablepre,$charset, $time);

            if($this->dbconnect) {
                    $this->link = mysql_dbconnect($this->dbhost, $this->dbuser, $this->dbpassword);
            } else {
                    $this->link = mysql_connect($this->dbhost, $this->dbuser, $this->dbpassword);
            }

            if($this->version() > '4.1') {
                    if($this->dbcharset) {
                            mysql_query("SET character_set_connection=".$this->dbcharset.", character_set_results=".$this->dbcharset.", character_set_client=binary", $this->link);
                    }

                    if($this->version() > '5.0.1') {
                            mysql_query("SET sql_mode=''", $this->link);
                    }
            }

            if($this->dbname) {
                    mysql_select_db($this->dbname, $this->link);
            }
	}
        
        public function dbinit($host, $user, $password, $name = '',$connect = 0, $tablepre='',$charset='gbk', $time = 0)
        {
                $this->dbhost = $host;
		$this->dbuser = $user;
		$this->dbpassword = $password;
		$this->dbname = $name;
		$this->dbconnect = $connect;
		$this->tablepre = $tablepre;
		$this->time = $time;
                $this->dbcharset = $charset ;
        }
	//创建查询函数    MySQL 查询
	public function query($sql)
	{
		return mysql_query($sql);
	} 

	//返回结果集中一个字段的值。
	public function result_first($sql)
	 {
		$query = $this->query($sql);
		return $this->result($query, 0);
	}
	
	//从结果集中取得一行作为数字数组。
	public function fetch_row($sql)
	 {
                $query = $this->query($sql);
		$result = mysql_fetch_row($query);
		return $result;
	}
	//从结果集中取得列信息并作为对象返回。
	public function fetch_fields($sql) 
	{
            $query = $this->query($sql);
		return mysql_fetch_field($query);
	}
	//查询一条SQL语句，并返回这个结果集
	public function fetch_arrone($sql)
	{
		$rs = $this->query($sql);
		$arr = mysql_fetch_array($rs, MYSQL_ASSOC);
		$this->free_result($rs);
		return $arr;
	}
	//查询一条SQL语句，并把这个结果集作为数组返回，数组ID可自己定义为一个数据库字段
	public function fetch_all($sql, $id = '') 
	{
		$arr = array();
                $query=mysql_query($sql);
		while($data = mysql_fetch_array($query, MYSQL_ASSOC)) {
			$id ? $arr[$data[$id]] = $data : $arr[] = $data;
		}
		$this->free_result($query);
		return $arr;
	}
	//返回前一次 MySQL 操作所影响的记录行数。执行成功，则返回受影响的行的数目，如果最近一次查询失败的话，函数返回 -1。
	public function affected_rows() 
	{
		return mysql_affected_rows($this->link);
	}
	//返回上一个 MySQL 操作产生的文本错误信息。本函数返回上一个 MySQL 函数的错误文本，如果没有出错则返回 ''（空字符串）。
	public function error() 
	{
		return (($this->link) ? mysql_error($this->link) : mysql_error());
	}
	//返回上一个 MySQL 操作中的错误信息的数字编码。返回上一个 MySQL 函数的错误号码，如果没有出错则返回 0（零）。
	public function errno() 
	{
		return intval(($this->link) ? mysql_errno($this->link) : mysql_errno());
	}
	//返回结果集中一个字段的值。
	public function result($query, $row)
	 {
		$query = @mysql_result($query, $row);
		return $query;
	}
	//取得结果集中行的数目。
	public function num_rows($query) 
	{
		$query = mysql_num_rows($query);
		return $query;
	}
	//取得结果集中字段的数目。
	public function num_fields($query) 
	{
		return mysql_num_fields($query);
	}
	//释放结果内存。如果成功，则返回 true，如果失败，则返回 false。
	public function free_result($query)
	 {
		return mysql_free_result($query);
	}
	//返回上一步 INSERT 操作产生的 ID。如果上一查询没有产生 AUTO_INCREMENT 的 ID，则 mysql_insert_id() 返回 0。
	public function insert_id()
	 {
		return ($id = mysql_insert_id($this->link)) >= 0 ? $id : $this->result($this->query("SELECT last_insert_id()"));
	}
	//取得 MySQL 服务器信息。
	public function version() 
	{
		return mysql_get_server_info($this->link);
	}
	//关闭数据库链接
	public function close()
	 {
		return mysql_close($this->link);
	}
	////////////////////////////////////////////////////
	//创建析构函数，关闭数据库
	public function __destruct()
	{
		return mysql_close($this->link);
	}
}

?>